今天介紹Python與RRDTool的應用,在系統管理的場合,
我們常常會使用一些指令來獲得系統的的運作情況.但是這些
指令是回報當時的狀況,而使用者或客戶往往會反應系統過慢
等等,或是說昨晚系統很慢,而事過境遷,我們沒有哆啦A夢的
時光機,無法回到當時來下指令獲取系統狀況.若能有程式能
長期運作,隔一段時間就將系統狀況資訊保存,我們再依據
保存起來的資料,來研究判斷,會比不精確的"感覺很慢",
合理且迅速找到問題.
前面曾經介紹 MySQL的 Archive 與 CSV 兩種引擎搭配使用,
再利用Python 程式呼叫 mpstat 來把系統 CPU使用量保存到
MySQL中,再搭配試算表繪製圖形,好處是可以使用SQL命令,
任意選擇區間來彈性獲得資料,缺點是需要操作好幾個步驟.
RRDTool 提供了另一種資料庫來存放這類型的數據,
廣泛應用在許多網管系統上,例如 Cacti.我們將利用RRDTool
來存放系統負荷及Processes資料.
系統負荷可以使用 uptime ,就會回報 1分鐘,5分鐘,15分鐘的狀況.
$ uptime
10:12:45 up 3:17, 1 user, load average: 0.88, 0.86, 0.79
以下請先看建立 RRD File的Python程式.
#!/usr/bin/env python
# ---------------------------------
# Python RRDTool
# Create LoadAvg and Processes RRD
# ---------------------------------
import rrdtool
rrdtool.create(
'sysload.rrd', '--step', '60',
'DS:load1:GAUGE:120:0:U',
'DS:load5:GAUGE:120:0:U',
'DS:load15:GAUGE:120:0:U',
'DS:nproc:GAUGE:120:0:U',
'DS:npslp:GAUGE:120:0:U',
'DS:nprun:GAUGE:120:0:U',
'RRA:AVERAGE:0.5:1:2880',
'RRA:AVERAGE:0.5:30:672',
'RRA:AVERAGE:0.5:60:744',
'RRA:AVERAGE:0.5:720:732',
'RRA:MAX:0.5:1:2880',
'RRA:MAX:0.5:30:672',
'RRA:MAX:0.5:60:744',
'RRA:MAX:0.5:720:732',
'RRA:MIN:0.5:1:2880',
'RRA:MIN:0.5:30:672',
'RRA:MIN:0.5:60:744',
'RRA:MIN:0.5:720:732',
'RRA:LAST:0.5:1:2880',
'RRA:LAST:0.5:30:672',
'RRA:LAST:0.5:60:744',
'RRA:LAST:0.5:720:732')
執行以後就會建立sysload.rrd 的檔案,再由後續的程式來
獲取系統負荷情況,然後寫入.